[INFO] cloning repository https://github.com/Nashenas88/borrow_visualizer_prototype
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Nashenas88/borrow_visualizer_prototype" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNashenas88%2Fborrow_visualizer_prototype", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNashenas88%2Fborrow_visualizer_prototype'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 00b683757d969f5e6c934cb8af14bec4c95b17ec
[INFO] checking Nashenas88/borrow_visualizer_prototype against master#9610dfe5a9a731ced1ea4923ecbd0c57fe367898 for beta-170-4
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNashenas88%2Fborrow_visualizer_prototype" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/Nashenas88/borrow_visualizer_prototype on toolchain 9610dfe5a9a731ced1ea4923ecbd0c57fe367898
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+9610dfe5a9a731ced1ea4923ecbd0c57fe367898" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/Nashenas88/borrow_visualizer_prototype
[INFO] finished tweaking git repo https://github.com/Nashenas88/borrow_visualizer_prototype
[INFO] tweaked toml for git repo https://github.com/Nashenas88/borrow_visualizer_prototype written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] crate git repo https://github.com/Nashenas88/borrow_visualizer_prototype already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+9610dfe5a9a731ced1ea4923ecbd0c57fe367898" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded log v0.3.7
[INFO] [stderr]   Downloaded serde_derive_internals v0.15.0
[INFO] [stderr]   Downloaded clap v2.24.2
[INFO] [stderr]   Downloaded serde v1.0.7
[INFO] [stderr]   Downloaded serde_derive v1.0.7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:19e73879b68f455e41552ea35293514db52ea292d993f571636dbffedb77a1ee" "/opt/rustwide/cargo-home/bin/cargo" "+9610dfe5a9a731ced1ea4923ecbd0c57fe367898" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] b41c05e6d3704dd3a66e1802f054329639b6d0e4c53b011af3c02b360f00052f
[INFO] running `Command { std: "docker" "start" "-a" "b41c05e6d3704dd3a66e1802f054329639b6d0e4c53b011af3c02b360f00052f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b41c05e6d3704dd3a66e1802f054329639b6d0e4c53b011af3c02b360f00052f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b41c05e6d3704dd3a66e1802f054329639b6d0e4c53b011af3c02b360f00052f", kill_on_drop: false }`
[INFO] [stdout] b41c05e6d3704dd3a66e1802f054329639b6d0e4c53b011af3c02b360f00052f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:19e73879b68f455e41552ea35293514db52ea292d993f571636dbffedb77a1ee" "/opt/rustwide/cargo-home/bin/cargo" "+9610dfe5a9a731ced1ea4923ecbd0c57fe367898" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 1e3d530192d4e1e2bc0ae8e51addec170a7cc2e093f0380586933ddace3cce62
[INFO] running `Command { std: "docker" "start" "-a" "1e3d530192d4e1e2bc0ae8e51addec170a7cc2e093f0380586933ddace3cce62", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]    Compiling unicode-xid v0.0.4
[INFO] [stderr]     Checking libc v0.2.23
[INFO] [stderr]    Compiling quote v0.3.15
[INFO] [stderr]     Checking unicode-width v0.1.4
[INFO] [stderr]     Checking ansi_term v0.9.0
[INFO] [stderr]     Checking strsim v0.6.0
[INFO] [stderr]     Checking serde v1.0.7
[INFO] [stderr]     Checking vec_map v0.8.0
[INFO] [stderr]     Checking itoa v0.3.1
[INFO] [stderr]     Checking bitflags v0.8.2
[INFO] [stderr]     Checking unicode-segmentation v1.2.0
[INFO] [stderr]     Checking num-traits v0.1.37
[INFO] [stderr]     Checking dtoa v0.4.1
[INFO] [stderr]     Checking log v0.3.7
[INFO] [stderr]    Compiling synom v0.11.3
[INFO] [stderr]    Compiling syn v0.11.11
[INFO] [stderr]     Checking atty v0.2.2
[INFO] [stderr]     Checking term_size v0.3.0
[INFO] [stderr]     Checking clap v2.24.2
[INFO] [stderr]    Compiling serde_derive_internals v0.15.0
[INFO] [stderr]    Compiling serde_derive v1.0.7
[INFO] [stderr]     Checking serde_json v1.0.2
[INFO] [stderr]     Checking borrow_bounds v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/main.rs:48:69
[INFO] [stdout]    |
[INFO] [stdout] 48 |     rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(box BlackHole{}));
[INFO] [stdout]    |                                                                     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 48 |     rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(Box::new(BlackHole{})));
[INFO] [stdout]    |                                                                     ~~~~~~~~~~~~~~~~~~~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0557]: feature has been removed
[INFO] [stdout]  --> src/main.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     box_syntax,
[INFO] [stdout]   |     ^^^^^^^^^^ feature has been removed
[INFO] [stdout]   |
[INFO] [stdout]   = note: replaced with `#[rustc_box]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0557]: feature has been removed
[INFO] [stdout]  --> src/main.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     rustc_diagnostic_macros,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^ feature has been removed
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/borrowcalls.rs:83:37
[INFO] [stdout]    |
[INFO] [stdout] 83 |             InputKind::Bytes(..) => box |_, kind, span| Region::Byte(ByteRegion::new(kind, span)),
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 83 |             InputKind::Bytes(..) => Box::new(|_, kind, span| Region::Byte(ByteRegion::new(kind, span))),
[INFO] [stdout]    |                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/borrowcalls.rs:84:40
[INFO] [stdout]    |
[INFO] [stdout] 84 |             InputKind::LineInfo(..) => box |tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span)),
[INFO] [stdout]    |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 84 |             InputKind::LineInfo(..) => Box::new(|tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span))),
[INFO] [stdout]    |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]    --> src/borrowcalls.rs:109:43
[INFO] [stdout]     |
[INFO] [stdout] 109 |           control.after_analysis.callback = box move |compile_state: &mut driver::CompileState| {
[INFO] [stdout]     |  ___________________________________________^
[INFO] [stdout] 110 | |             let tcx = if let Some(tcx) = compile_state.tcx {
[INFO] [stdout] 111 | |                 tcx
[INFO] [stdout] 112 | |             } else {
[INFO] [stdout] ...   |
[INFO] [stdout] 279 | |                 .join(","));
[INFO] [stdout] 280 | |         };
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]     |
[INFO] [stdout] 109 ~         control.after_analysis.callback = Box::new(move |compile_state: &mut driver::CompileState| {
[INFO] [stdout] 110 +             let tcx = if let Some(tcx) = compile_state.tcx {
[INFO] [stdout] 111 +                 tcx
[INFO] [stdout] 112 +             } else {
[INFO] [stdout] 113 +                 debug!("no tcx");
[INFO] [stdout] 114 +                 return;
[INFO] [stdout] 115 +             };
[INFO] [stdout] 116 + 
[INFO] [stdout] 117 +             let (offset, line) = match this.get_byte_info(tcx) {
[INFO] [stdout] 118 +                 Ok(res) => res,
[INFO] [stdout] 119 +                 Err(e) => {
[INFO] [stdout] 120 +                     error::print_error(format!("{}", e));
[INFO] [stdout] 121 +                     return;
[INFO] [stdout] 122 +                 }
[INFO] [stdout] 123 +             };
[INFO] [stdout] 124 + 
[INFO] [stdout] 125 +             let (node_id, node, fn_like, fn_node, fn_id) = match nodeid_from_offset_and_line(tcx, offset, &line) {
[INFO] [stdout] 126 +                 Some(res) => res,
[INFO] [stdout] 127 +                 None => {
[INFO] [stdout] 128 +                     debug!("unable to find matching nodeid for offset {} at line {:?}", offset.0, line);
[INFO] [stdout] 129 +                     println!("[]");
[INFO] [stdout] 130 +                     return;
[INFO] [stdout] 131 +                 }
[INFO] [stdout] 132 +             };
[INFO] [stdout] 133 + 
[INFO] [stdout] 134 +             let fn_span = tcx.hir.span(fn_id);
[INFO] [stdout] 135 + 
[INFO] [stdout] 136 +             let body = tcx.hir.krate().body(fn_like.body());
[INFO] [stdout] 137 +             let cfg = cfg::CFG::new(tcx, &body);
[INFO] [stdout] 138 +             let (bccx, analysis_data) = borrowck::build_borrowck_dataflow_data_for_fn(
[INFO] [stdout] 139 +                 tcx,
[INFO] [stdout] 140 +                 fn_like.body(),
[INFO] [stdout] 141 +                 &cfg);
[INFO] [stdout] 142 +             // debug!("Found {} loans within fn-like identified by {}:\n{:?}\n{:?}", analysis_data.all_loans.len(), node_id.as_u32(), node, fn_node);
[INFO] [stdout] 143 + 
[INFO] [stdout] 144 +             // In a succesful compilation, `moves` will have 0 or 1 elements. Fortunately,
[INFO] [stdout] 145 +             // we work with failing compilations too, so it's important that we limit
[INFO] [stdout] 146 +             // the highlighting of the "live" span to the end of the first move. The goal
[INFO] [stdout] 147 +             // is to help the user more easily realize that the second move is impossible.
[INFO] [stdout] 148 +             let move_data = analysis_data.move_data.move_data;
[INFO] [stdout] 149 +             let move_data_moves = move_data.moves.borrow();
[INFO] [stdout] 150 +             let mut moves: Vec<_> = move_data_moves.iter()
[INFO] [stdout] 151 +                 .filter(|m| {
[INFO] [stdout] 152 +                     debug!("Potential move: {:?}-{:?}", m.id, m.kind);
[INFO] [stdout] 153 +                     move_data.path_loan_path(m.path).belongs_to(node_id)
[INFO] [stdout] 154 +                 })
[INFO] [stdout] 155 +                 .map(|m| tcx.hir.span(m.id))
[INFO] [stdout] 156 +                 .collect();
[INFO] [stdout] 157 +             moves.sort();
[INFO] [stdout] 158 +             let first_move = if moves.len() > 0 { Some(moves[0]) } else { None };
[INFO] [stdout] 159 + 
[INFO] [stdout] 160 +             for pa in move_data.path_assignments.borrow().iter() {
[INFO] [stdout] 161 +                 debug!("Potential path assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(pa.id), pa.span.lo, pa.span.hi, tcx.hir.find(pa.assignee_id));
[INFO] [stdout] 162 +             }
[INFO] [stdout] 163 + 
[INFO] [stdout] 164 +             for vm in move_data.variant_matches.borrow().iter() {
[INFO] [stdout] 165 +                 debug!("Potential variant match: {:?}-{:?}", tcx.hir.find(vm.id), vm.mode);
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 + 
[INFO] [stdout] 168 +             // gather and return analysis data when loan internals can be accessed imm
[INFO] [stdout] 169 +             let mut regions = move_data.var_assignments.borrow().iter()
[INFO] [stdout] 170 +                 .filter(|a| {
[INFO] [stdout] 171 +                     debug!("Potential var_assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(a.id), a.span.lo, a.span.hi, tcx.hir.find(a.assignee_id));
[INFO] [stdout] 172 +                     a.assignee_id == node_id
[INFO] [stdout] 173 +                 })
[INFO] [stdout] 174 +                 .filter_map(|a| {
[INFO] [stdout] 175 +                     // we may want to visualiza a.span in some way
[INFO] [stdout] 176 +                     let path = move_data.path_loan_path(a.path);
[INFO] [stdout] 177 +                     let kill_span = path.kill_scope(&bccx).span(&tcx.hir);
[INFO] [stdout] 178 +                     if let Some(kill_span) = kill_span {
[INFO] [stdout] 179 +                         // If there's a move span, then we limit the "live" span to the end
[INFO] [stdout] 180 +                         // of the move span. This shows that the variable's "scope" has
[INFO] [stdout] 181 +                         // ended at this point. Any usages (reads, writes, borrows, moves)
[INFO] [stdout] 182 +                         // can still be visualized, but should match with compiler errors.
[INFO] [stdout] 183 +                         let hi = if let Some(move_span) = first_move {
[INFO] [stdout] 184 +                             move_span.hi
[INFO] [stdout] 185 +                         } else {
[INFO] [stdout] 186 +                             kill_span.hi
[INFO] [stdout] 187 +                         };
[INFO] [stdout] 188 +                         let live_span = Span{ lo: kill_span.lo, hi: hi, ctxt: syntax_pos::NO_EXPANSION };
[INFO] [stdout] 189 +                         Some(region_constructor(tcx, Kind::Live, live_span))
[INFO] [stdout] 190 +                     } else {
[INFO] [stdout] 191 +                         debug!("kill_span does not exist for var");
[INFO] [stdout] 192 +                         None
[INFO] [stdout] 193 +                     }
[INFO] [stdout] 194 +                 })
[INFO] [stdout] 195 +                 .chain(analysis_data.safe_loans.iter()
[INFO] [stdout] 196 +                     .filter_map(|ref sl| {
[INFO] [stdout] 197 +                         let loan_scope = sl.loan_scope();
[INFO] [stdout] 198 +                         let borrow_node = tcx.hir.find(loan_scope.node_id());
[INFO] [stdout] 199 +                         let borrow_node = match borrow_node {
[INFO] [stdout] 200 +                             Some(node) => node,
[INFO] [stdout] 201 +                             _ => return None,
[INFO] [stdout] 202 +                         };
[INFO] [stdout] 203 + 
[INFO] [stdout] 204 +                         if let hir_map::NodeExpr(expr) = borrow_node {
[INFO] [stdout] 205 +                             if !expr_borrows_node_id(&tcx, node_id, expr, false) {
[INFO] [stdout] 206 +                                 return None;
[INFO] [stdout] 207 +                             }
[INFO] [stdout] 208 + 
[INFO] [stdout] 209 +                             let kind = match sl.kind() {
[INFO] [stdout] 210 +                                 ty::BorrowKind::ImmBorrow => Kind::Immutable,
[INFO] [stdout] 211 +                                 ty::BorrowKind::MutBorrow => Kind::Mutable,
[INFO] [stdout] 212 +                                 ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable,
[INFO] [stdout] 213 +                             };
[INFO] [stdout] 214 + 
[INFO] [stdout] 215 +                             debug!("Loan scope: {:?}", loan_scope);
[INFO] [stdout] 216 +                             let loan_span = loan_scope
[INFO] [stdout] 217 +                                 .span(&tcx.hir)
[INFO] [stdout] 218 +                                 .and_then(|s| get_unexpanded_span(s, fn_span));
[INFO] [stdout] 219 + 
[INFO] [stdout] 220 +                             debug!("Loan span: {:?}", loan_span);
[INFO] [stdout] 221 +                             let loan_span = match loan_span {
[INFO] [stdout] 222 +                                 Some(span) => span,
[INFO] [stdout] 223 +                                 None => return None,
[INFO] [stdout] 224 +                             };
[INFO] [stdout] 225 +                             return Some(region_constructor(tcx, kind, loan_span));
[INFO] [stdout] 226 +                         }
[INFO] [stdout] 227 + 
[INFO] [stdout] 228 +                         None
[INFO] [stdout] 229 +                     }))
[INFO] [stdout] 230 +                 .chain(analysis_data.all_loans.iter()
[INFO] [stdout] 231 +                     // we only care abouts loans related to our target
[INFO] [stdout] 232 +                     .filter(|&loan| {
[INFO] [stdout] 233 +                         debug!("Potential: {:?}", loan);
[INFO] [stdout] 234 +                         (*loan.loan_path()).belongs_to(node_id)
[INFO] [stdout] 235 +                     })
[INFO] [stdout] 236 +                     .filter_map(|loan| {
[INFO] [stdout] 237 +                         debug!("hit");
[INFO] [stdout] 238 +                         let kind = match loan.kind() {
[INFO] [stdout] 239 +                             ty::BorrowKind::ImmBorrow => Kind::Immutable,
[INFO] [stdout] 240 +                             ty::BorrowKind::MutBorrow => Kind::Mutable,
[INFO] [stdout] 241 +                             ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable,
[INFO] [stdout] 242 +                         };
[INFO] [stdout] 243 + 
[INFO] [stdout] 244 +                         // FIXME: do we need this -> let span = loan.span();
[INFO] [stdout] 245 + 
[INFO] [stdout] 246 +                         // Make sure to get the unexpanded span, otherwise we'll
[INFO] [stdout] 247 +                         // the span of the macro definition in another file! This
[INFO] [stdout] 248 +                         // leads to some obviously (though it more rarely might not be)
[INFO] [stdout] 249 +                         // incorrect spans;
[INFO] [stdout] 250 +                         let gen_span = loan.gen_scope()
[INFO] [stdout] 251 +                             .span(&tcx.hir)
[INFO] [stdout] 252 +                             .and_then(|s| get_unexpanded_span(s, fn_span));
[INFO] [stdout] 253 +                         let kill_span = loan.kill_scope()
[INFO] [stdout] 254 +                             .span(&tcx.hir)
[INFO] [stdout] 255 +                             .and_then(|s| get_unexpanded_span(s, fn_span));
[INFO] [stdout] 256 + 
[INFO] [stdout] 257 +                         if let (Some(gen_span), Some(kill_span)) = (gen_span, kill_span) {
[INFO] [stdout] 258 +                             let borrow_span = syntax_pos::Span{
[INFO] [stdout] 259 +                                 lo: gen_span.lo,
[INFO] [stdout] 260 +                                 hi: kill_span.hi,
[INFO] [stdout] 261 +                                 ctxt: syntax_pos::NO_EXPANSION
[INFO] [stdout] 262 +                             };
[INFO] [stdout] 263 +                             Some(region_constructor(tcx, kind, borrow_span))
[INFO] [stdout] 264 +                         } else {
[INFO] [stdout] 265 +                             debug!("One of gen_span or kill_span does not exist for loan");
[INFO] [stdout] 266 +                             None
[INFO] [stdout] 267 +                         }
[INFO] [stdout] 268 +                     }))
[INFO] [stdout] 269 +                 .chain(moves.iter().map(|s| region_constructor(tcx, Kind::Move, *s)))
[INFO] [stdout] 270 +                 .collect::<Vec<_>>();
[INFO] [stdout] 271 +             regions.push(region_constructor(tcx, Kind::Assign, tcx.hir.span(node_id)));
[INFO] [stdout] 272 +             regions.sort();
[INFO] [stdout] 273 +             println!("[{}]", regions.iter().map(|r| match *r {
[INFO] [stdout] 274 +                     Region::Byte(ref r) => serde_json::to_string(r),
[INFO] [stdout] 275 +                     Region::Line(ref r) => serde_json::to_string(r),
[INFO] [stdout] 276 +                 })
[INFO] [stdout] 277 +                 .map(|serialize_result| serialize_result.unwrap_or_else(|e| panic!("failed to serialize: {:?}", e)))
[INFO] [stdout] 278 +                 .collect::<Vec<_>>()
[INFO] [stdout] 279 +                 .join(","));
[INFO] [stdout] 280 ~         });
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0462]: found staticlib `rustc` instead of rlib or dylib
[INFO] [stdout]  --> src/main.rs:9:1
[INFO] [stdout]   |
[INFO] [stdout] 9 | extern crate rustc;
[INFO] [stdout]   | ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: the following crate versions were found:
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.tsan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.msan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.lsan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.safestack.a
[INFO] [stdout]   = help: please recompile that crate using --crate-type lib
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `rustc_driver`
[INFO] [stdout]   --> src/main.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | extern crate rustc_driver;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `rustc_borrowck`
[INFO] [stdout]   --> src/main.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | extern crate rustc_borrowck as borrowck;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `rustc_errors`
[INFO] [stdout]   --> src/main.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | extern crate rustc_errors as errors;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `syntax`
[INFO] [stdout]   --> src/main.rs:13:1
[INFO] [stdout]    |
[INFO] [stdout] 13 | extern crate syntax;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `syntax_pos`
[INFO] [stdout]   --> src/main.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | extern crate syntax_pos;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/main.rs:48:69
[INFO] [stdout]    |
[INFO] [stdout] 48 |     rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(box BlackHole{}));
[INFO] [stdout]    |                                                                     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 48 |     rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(Box::new(BlackHole{})));
[INFO] [stdout]    |                                                                     ~~~~~~~~~~~~~~~~~~~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0557]: feature has been removed
[INFO] [stdout]  --> src/main.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 |     box_syntax,
[INFO] [stdout]   |     ^^^^^^^^^^ feature has been removed
[INFO] [stdout]   |
[INFO] [stdout]   = note: replaced with `#[rustc_box]`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0557]: feature has been removed
[INFO] [stdout]  --> src/main.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 |     rustc_diagnostic_macros,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^ feature has been removed
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/borrowcalls.rs:83:37
[INFO] [stdout]    |
[INFO] [stdout] 83 |             InputKind::Bytes(..) => box |_, kind, span| Region::Byte(ByteRegion::new(kind, span)),
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 83 |             InputKind::Bytes(..) => Box::new(|_, kind, span| Region::Byte(ByteRegion::new(kind, span))),
[INFO] [stdout]    |                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/borrowcalls.rs:84:40
[INFO] [stdout]    |
[INFO] [stdout] 84 |             InputKind::LineInfo(..) => box |tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span)),
[INFO] [stdout]    |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 84 |             InputKind::LineInfo(..) => Box::new(|tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span))),
[INFO] [stdout]    |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/args.rs:59:21
[INFO] [stdout]    |
[INFO] [stdout] 59 |                     box SimpleFileLogger::new(file.unwrap())
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 59 |                     Box::new(SimpleFileLogger::new(file.unwrap()))
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/args.rs:81:21
[INFO] [stdout]    |
[INFO] [stdout] 81 |                     box SimpleFileLogger::new(file.unwrap())
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 81 |                     Box::new(SimpleFileLogger::new(file.unwrap()))
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]    --> src/borrowcalls.rs:109:43
[INFO] [stdout]     |
[INFO] [stdout] 109 |           control.after_analysis.callback = box move |compile_state: &mut driver::CompileState| {
[INFO] [stdout]     |  ___________________________________________^
[INFO] [stdout] 110 | |             let tcx = if let Some(tcx) = compile_state.tcx {
[INFO] [stdout] 111 | |                 tcx
[INFO] [stdout] 112 | |             } else {
[INFO] [stdout] ...   |
[INFO] [stdout] 279 | |                 .join(","));
[INFO] [stdout] 280 | |         };
[INFO] [stdout]     | |_________^
[INFO] [stdout]     |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]     |
[INFO] [stdout] 109 ~         control.after_analysis.callback = Box::new(move |compile_state: &mut driver::CompileState| {
[INFO] [stdout] 110 +             let tcx = if let Some(tcx) = compile_state.tcx {
[INFO] [stdout] 111 +                 tcx
[INFO] [stdout] 112 +             } else {
[INFO] [stdout] 113 +                 debug!("no tcx");
[INFO] [stdout] 114 +                 return;
[INFO] [stdout] 115 +             };
[INFO] [stdout] 116 + 
[INFO] [stdout] 117 +             let (offset, line) = match this.get_byte_info(tcx) {
[INFO] [stdout] 118 +                 Ok(res) => res,
[INFO] [stdout] 119 +                 Err(e) => {
[INFO] [stdout] 120 +                     error::print_error(format!("{}", e));
[INFO] [stdout] 121 +                     return;
[INFO] [stdout] 122 +                 }
[INFO] [stdout] 123 +             };
[INFO] [stdout] 124 + 
[INFO] [stdout] 125 +             let (node_id, node, fn_like, fn_node, fn_id) = match nodeid_from_offset_and_line(tcx, offset, &line) {
[INFO] [stdout] 126 +                 Some(res) => res,
[INFO] [stdout] 127 +                 None => {
[INFO] [stdout] 128 +                     debug!("unable to find matching nodeid for offset {} at line {:?}", offset.0, line);
[INFO] [stdout] 129 +                     println!("[]");
[INFO] [stdout] 130 +                     return;
[INFO] [stdout] 131 +                 }
[INFO] [stdout] 132 +             };
[INFO] [stdout] 133 + 
[INFO] [stdout] 134 +             let fn_span = tcx.hir.span(fn_id);
[INFO] [stdout] 135 + 
[INFO] [stdout] 136 +             let body = tcx.hir.krate().body(fn_like.body());
[INFO] [stdout] 137 +             let cfg = cfg::CFG::new(tcx, &body);
[INFO] [stdout] 138 +             let (bccx, analysis_data) = borrowck::build_borrowck_dataflow_data_for_fn(
[INFO] [stdout] 139 +                 tcx,
[INFO] [stdout] 140 +                 fn_like.body(),
[INFO] [stdout] 141 +                 &cfg);
[INFO] [stdout] 142 +             // debug!("Found {} loans within fn-like identified by {}:\n{:?}\n{:?}", analysis_data.all_loans.len(), node_id.as_u32(), node, fn_node);
[INFO] [stdout] 143 + 
[INFO] [stdout] 144 +             // In a succesful compilation, `moves` will have 0 or 1 elements. Fortunately,
[INFO] [stdout] 145 +             // we work with failing compilations too, so it's important that we limit
[INFO] [stdout] 146 +             // the highlighting of the "live" span to the end of the first move. The goal
[INFO] [stdout] 147 +             // is to help the user more easily realize that the second move is impossible.
[INFO] [stdout] 148 +             let move_data = analysis_data.move_data.move_data;
[INFO] [stdout] 149 +             let move_data_moves = move_data.moves.borrow();
[INFO] [stdout] 150 +             let mut moves: Vec<_> = move_data_moves.iter()
[INFO] [stdout] 151 +                 .filter(|m| {
[INFO] [stdout] 152 +                     debug!("Potential move: {:?}-{:?}", m.id, m.kind);
[INFO] [stdout] 153 +                     move_data.path_loan_path(m.path).belongs_to(node_id)
[INFO] [stdout] 154 +                 })
[INFO] [stdout] 155 +                 .map(|m| tcx.hir.span(m.id))
[INFO] [stdout] 156 +                 .collect();
[INFO] [stdout] 157 +             moves.sort();
[INFO] [stdout] 158 +             let first_move = if moves.len() > 0 { Some(moves[0]) } else { None };
[INFO] [stdout] 159 + 
[INFO] [stdout] 160 +             for pa in move_data.path_assignments.borrow().iter() {
[INFO] [stdout] 161 +                 debug!("Potential path assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(pa.id), pa.span.lo, pa.span.hi, tcx.hir.find(pa.assignee_id));
[INFO] [stdout] 162 +             }
[INFO] [stdout] 163 + 
[INFO] [stdout] 164 +             for vm in move_data.variant_matches.borrow().iter() {
[INFO] [stdout] 165 +                 debug!("Potential variant match: {:?}-{:?}", tcx.hir.find(vm.id), vm.mode);
[INFO] [stdout] 166 +             }
[INFO] [stdout] 167 + 
[INFO] [stdout] 168 +             // gather and return analysis data when loan internals can be accessed imm
[INFO] [stdout] 169 +             let mut regions = move_data.var_assignments.borrow().iter()
[INFO] [stdout] 170 +                 .filter(|a| {
[INFO] [stdout] 171 +                     debug!("Potential var_assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(a.id), a.span.lo, a.span.hi, tcx.hir.find(a.assignee_id));
[INFO] [stdout] 172 +                     a.assignee_id == node_id
[INFO] [stdout] 173 +                 })
[INFO] [stdout] 174 +                 .filter_map(|a| {
[INFO] [stdout] 175 +                     // we may want to visualiza a.span in some way
[INFO] [stdout] 176 +                     let path = move_data.path_loan_path(a.path);
[INFO] [stdout] 177 +                     let kill_span = path.kill_scope(&bccx).span(&tcx.hir);
[INFO] [stdout] 178 +                     if let Some(kill_span) = kill_span {
[INFO] [stdout] 179 +                         // If there's a move span, then we limit the "live" span to the end
[INFO] [stdout] 180 +                         // of the move span. This shows that the variable's "scope" has
[INFO] [stdout] 181 +                         // ended at this point. Any usages (reads, writes, borrows, moves)
[INFO] [stdout] 182 +                         // can still be visualized, but should match with compiler errors.
[INFO] [stdout] 183 +                         let hi = if let Some(move_span) = first_move {
[INFO] [stdout] 184 +                             move_span.hi
[INFO] [stdout] 185 +                         } else {
[INFO] [stdout] 186 +                             kill_span.hi
[INFO] [stdout] 187 +                         };
[INFO] [stdout] 188 +                         let live_span = Span{ lo: kill_span.lo, hi: hi, ctxt: syntax_pos::NO_EXPANSION };
[INFO] [stdout] 189 +                         Some(region_constructor(tcx, Kind::Live, live_span))
[INFO] [stdout] 190 +                     } else {
[INFO] [stdout] 191 +                         debug!("kill_span does not exist for var");
[INFO] [stdout] 192 +                         None
[INFO] [stdout] 193 +                     }
[INFO] [stdout] 194 +                 })
[INFO] [stdout] 195 +                 .chain(analysis_data.safe_loans.iter()
[INFO] [stdout] 196 +                     .filter_map(|ref sl| {
[INFO] [stdout] 197 +                         let loan_scope = sl.loan_scope();
[INFO] [stdout] 198 +                         let borrow_node = tcx.hir.find(loan_scope.node_id());
[INFO] [stdout] 199 +                         let borrow_node = match borrow_node {
[INFO] [stdout] 200 +                             Some(node) => node,
[INFO] [stdout] 201 +                             _ => return None,
[INFO] [stdout] 202 +                         };
[INFO] [stdout] 203 + 
[INFO] [stdout] 204 +                         if let hir_map::NodeExpr(expr) = borrow_node {
[INFO] [stdout] 205 +                             if !expr_borrows_node_id(&tcx, node_id, expr, false) {
[INFO] [stdout] 206 +                                 return None;
[INFO] [stdout] 207 +                             }
[INFO] [stdout] 208 + 
[INFO] [stdout] 209 +                             let kind = match sl.kind() {
[INFO] [stdout] 210 +                                 ty::BorrowKind::ImmBorrow => Kind::Immutable,
[INFO] [stdout] 211 +                                 ty::BorrowKind::MutBorrow => Kind::Mutable,
[INFO] [stdout] 212 +                                 ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable,
[INFO] [stdout] 213 +                             };
[INFO] [stdout] 214 + 
[INFO] [stdout] 215 +                             debug!("Loan scope: {:?}", loan_scope);
[INFO] [stdout] 216 +                             let loan_span = loan_scope
[INFO] [stdout] 217 +                                 .span(&tcx.hir)
[INFO] [stdout] 218 +                                 .and_then(|s| get_unexpanded_span(s, fn_span));
[INFO] [stdout] 219 + 
[INFO] [stdout] 220 +                             debug!("Loan span: {:?}", loan_span);
[INFO] [stdout] 221 +                             let loan_span = match loan_span {
[INFO] [stdout] 222 +                                 Some(span) => span,
[INFO] [stdout] 223 +                                 None => return None,
[INFO] [stdout] 224 +                             };
[INFO] [stdout] 225 +                             return Some(region_constructor(tcx, kind, loan_span));
[INFO] [stdout] 226 +                         }
[INFO] [stdout] 227 + 
[INFO] [stdout] 228 +                         None
[INFO] [stdout] 229 +                     }))
[INFO] [stdout] 230 +                 .chain(analysis_data.all_loans.iter()
[INFO] [stdout] 231 +                     // we only care abouts loans related to our target
[INFO] [stdout] 232 +                     .filter(|&loan| {
[INFO] [stdout] 233 +                         debug!("Potential: {:?}", loan);
[INFO] [stdout] 234 +                         (*loan.loan_path()).belongs_to(node_id)
[INFO] [stdout] 235 +                     })
[INFO] [stdout] 236 +                     .filter_map(|loan| {
[INFO] [stdout] 237 +                         debug!("hit");
[INFO] [stdout] 238 +                         let kind = match loan.kind() {
[INFO] [stdout] 239 +                             ty::BorrowKind::ImmBorrow => Kind::Immutable,
[INFO] [stdout] 240 +                             ty::BorrowKind::MutBorrow => Kind::Mutable,
[INFO] [stdout] 241 +                             ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable,
[INFO] [stdout] 242 +                         };
[INFO] [stdout] 243 + 
[INFO] [stdout] 244 +                         // FIXME: do we need this -> let span = loan.span();
[INFO] [stdout] 245 + 
[INFO] [stdout] 246 +                         // Make sure to get the unexpanded span, otherwise we'll
[INFO] [stdout] 247 +                         // the span of the macro definition in another file! This
[INFO] [stdout] 248 +                         // leads to some obviously (though it more rarely might not be)
[INFO] [stdout] 249 +                         // incorrect spans;
[INFO] [stdout] 250 +                         let gen_span = loan.gen_scope()
[INFO] [stdout] 251 +                             .span(&tcx.hir)
[INFO] [stdout] 252 +                             .and_then(|s| get_unexpanded_span(s, fn_span));
[INFO] [stdout] 253 +                         let kill_span = loan.kill_scope()
[INFO] [stdout] 254 +                             .span(&tcx.hir)
[INFO] [stdout] 255 +                             .and_then(|s| get_unexpanded_span(s, fn_span));
[INFO] [stdout] 256 + 
[INFO] [stdout] 257 +                         if let (Some(gen_span), Some(kill_span)) = (gen_span, kill_span) {
[INFO] [stdout] 258 +                             let borrow_span = syntax_pos::Span{
[INFO] [stdout] 259 +                                 lo: gen_span.lo,
[INFO] [stdout] 260 +                                 hi: kill_span.hi,
[INFO] [stdout] 261 +                                 ctxt: syntax_pos::NO_EXPANSION
[INFO] [stdout] 262 +                             };
[INFO] [stdout] 263 +                             Some(region_constructor(tcx, kind, borrow_span))
[INFO] [stdout] 264 +                         } else {
[INFO] [stdout] 265 +                             debug!("One of gen_span or kill_span does not exist for loan");
[INFO] [stdout] 266 +                             None
[INFO] [stdout] 267 +                         }
[INFO] [stdout] 268 +                     }))
[INFO] [stdout] 269 +                 .chain(moves.iter().map(|s| region_constructor(tcx, Kind::Move, *s)))
[INFO] [stdout] 270 +                 .collect::<Vec<_>>();
[INFO] [stdout] 271 +             regions.push(region_constructor(tcx, Kind::Assign, tcx.hir.span(node_id)));
[INFO] [stdout] 272 +             regions.sort();
[INFO] [stdout] 273 +             println!("[{}]", regions.iter().map(|r| match *r {
[INFO] [stdout] 274 +                     Region::Byte(ref r) => serde_json::to_string(r),
[INFO] [stdout] 275 +                     Region::Line(ref r) => serde_json::to_string(r),
[INFO] [stdout] 276 +                 })
[INFO] [stdout] 277 +                 .map(|serialize_result| serialize_result.unwrap_or_else(|e| panic!("failed to serialize: {:?}", e)))
[INFO] [stdout] 278 +                 .collect::<Vec<_>>()
[INFO] [stdout] 279 +                 .join(","));
[INFO] [stdout] 280 ~         });
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0462]: found staticlib `rustc` instead of rlib or dylib
[INFO] [stdout]  --> src/main.rs:9:1
[INFO] [stdout]   |
[INFO] [stdout] 9 | extern crate rustc;
[INFO] [stdout]   | ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: the following crate versions were found:
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.tsan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.msan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.lsan.a
[INFO] [stdout]           crate `rustc`: /opt/rustwide/rustup-home/toolchains/9610dfe5a9a731ced1ea4923ecbd0c57fe367898/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.safestack.a
[INFO] [stdout]   = help: please recompile that crate using --crate-type lib
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `rustc_driver`
[INFO] [stdout]   --> src/main.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | extern crate rustc_driver;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `rustc_borrowck`
[INFO] [stdout]   --> src/main.rs:11:1
[INFO] [stdout]    |
[INFO] [stdout] 11 | extern crate rustc_borrowck as borrowck;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `rustc_errors`
[INFO] [stdout]   --> src/main.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | extern crate rustc_errors as errors;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `syntax`
[INFO] [stdout]   --> src/main.rs:13:1
[INFO] [stdout]    |
[INFO] [stdout] 13 | extern crate syntax;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0463]: can't find crate for `syntax_pos`
[INFO] [stdout]   --> src/main.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | extern crate syntax_pos;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:49:26
[INFO] [stdout]    |
[INFO] [stdout] 49 |             let offset = try!(sub_m.value_of("offset").unwrap().parse::<u32>());
[INFO] [stdout]    |                          ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:50:30
[INFO] [stdout]    |
[INFO] [stdout] 50 |             let line_start = try!(sub_m.value_of("line_start").unwrap().parse::<u32>());
[INFO] [stdout]    |                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:51:28
[INFO] [stdout]    |
[INFO] [stdout] 51 |             let line_end = try!(sub_m.value_of("line_end").unwrap().parse::<u32>());
[INFO] [stdout]    |                            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:53:17
[INFO] [stdout]    |
[INFO] [stdout] 53 |                 try!(log::set_logger(move |_| {
[INFO] [stdout]    |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:71:24
[INFO] [stdout]    |
[INFO] [stdout] 71 |             let line = try!(sub_m.value_of("line").unwrap().parse::<u32>());
[INFO] [stdout]    |                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:72:26
[INFO] [stdout]    |
[INFO] [stdout] 72 |             let column = try!(sub_m.value_of("column").unwrap().parse::<u32>());
[INFO] [stdout]    |                          ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:74:17
[INFO] [stdout]    |
[INFO] [stdout] 74 |                 try!(log::set_logger(move |max_log_level| {
[INFO] [stdout]    |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/args.rs:59:21
[INFO] [stdout]    |
[INFO] [stdout] 59 |                     box SimpleFileLogger::new(file.unwrap())
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 59 |                     Box::new(SimpleFileLogger::new(file.unwrap()))
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: `box_syntax` has been removed
[INFO] [stdout]   --> src/args.rs:81:21
[INFO] [stdout]    |
[INFO] [stdout] 81 |                     box SimpleFileLogger::new(file.unwrap())
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: use `Box::new()` instead
[INFO] [stdout]    |
[INFO] [stdout] 81 |                     Box::new(SimpleFileLogger::new(file.unwrap()))
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the feature `conservative_impl_trait` has been stable since 1.26.0 and no longer requires an attribute to enable
[INFO] [stdout]  --> src/main.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 |     conservative_impl_trait,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(stable_features)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the feature `str_escape` has been stable since 1.34.0 and no longer requires an attribute to enable
[INFO] [stdout]  --> src/main.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     str_escape)]
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:49:26
[INFO] [stdout]    |
[INFO] [stdout] 49 |             let offset = try!(sub_m.value_of("offset").unwrap().parse::<u32>());
[INFO] [stdout]    |                          ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:50:30
[INFO] [stdout]    |
[INFO] [stdout] 50 |             let line_start = try!(sub_m.value_of("line_start").unwrap().parse::<u32>());
[INFO] [stdout]    |                              ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:51:28
[INFO] [stdout]    |
[INFO] [stdout] 51 |             let line_end = try!(sub_m.value_of("line_end").unwrap().parse::<u32>());
[INFO] [stdout]    |                            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:53:17
[INFO] [stdout]    |
[INFO] [stdout] 53 |                 try!(log::set_logger(move |_| {
[INFO] [stdout]    |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:71:24
[INFO] [stdout]    |
[INFO] [stdout] 71 |             let line = try!(sub_m.value_of("line").unwrap().parse::<u32>());
[INFO] [stdout]    |                        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:72:26
[INFO] [stdout]    |
[INFO] [stdout] 72 |             let column = try!(sub_m.value_of("column").unwrap().parse::<u32>());
[INFO] [stdout]    |                          ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]   --> src/args.rs:74:17
[INFO] [stdout]    |
[INFO] [stdout] 74 |                 try!(log::set_logger(move |max_log_level| {
[INFO] [stdout]    |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the feature `conservative_impl_trait` has been stable since 1.26.0 and no longer requires an attribute to enable
[INFO] [stdout]  --> src/main.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 |     conservative_impl_trait,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(stable_features)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: the feature `str_escape` has been stable since 1.34.0 and no longer requires an attribute to enable
[INFO] [stdout]  --> src/main.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     str_escape)]
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 14 previous errors; 9 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0462, E0463, E0557.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0462`.
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 14 previous errors; 9 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0462, E0463, E0557.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0462`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `borrow_bounds` (bin "borrow_bounds" test) due to 15 previous errors; 9 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stderr] error: could not compile `borrow_bounds` (bin "borrow_bounds") due to 15 previous errors; 9 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "1e3d530192d4e1e2bc0ae8e51addec170a7cc2e093f0380586933ddace3cce62", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1e3d530192d4e1e2bc0ae8e51addec170a7cc2e093f0380586933ddace3cce62", kill_on_drop: false }`
[INFO] [stdout] 1e3d530192d4e1e2bc0ae8e51addec170a7cc2e093f0380586933ddace3cce62
